﻿using FluentNHibernate.Mapping;

namespace Neturion.Dados
{
    public class MapProduto : ClassMap<Produto>
    {
        public MapProduto()
        {
            Table("produtos");
            Id(x => x.ProdutoId);
            Map(x => x.Codigo).Unique().Index("idx_Codigo");
            Map(x => x.CodigoBarras).Length(15).Not.Nullable().Index("idx_CodigoBarras");
            Map(x => x.CodigoMarca).Length(6).Not.Nullable();
            Map(x => x.Complemento).Length(100).Not.Nullable();
            Map(x => x.Descricao).Length(150);
            Map(x => x.DescricaoAbreviada).Length(30).Not.Nullable();
            Map(x => x.FlagServico).Not.Nullable();
            Map(x => x.Localizacao).Length(20).Not.Nullable();
            Map(x => x.PesoBruto).Precision(13).Scale(3).Not.Nullable().Default("0.000");
            Map(x => x.PesoLiquido).Precision(13).Scale(3).Not.Nullable().Default("0.000");
            Map(x => x.Referencia).Length(25).Not.Nullable().Index("Referencia");
            Map(x => x.Volume).Precision(13).Scale(2).Not.Nullable();
            Map(x => x.IndicadorArredondamentoTruncamento).Length(1);
            Map(x => x.IndicadorProducaoPropriaTerceiro).Length(1);
            Map(x => x.Ncm).Length(8).Not.Nullable();
            Map(x => x.AliquotaIpi).Length(5).Not.Nullable();
            Map(x => x.CodigoTipo).Length(3).Not.Nullable();
            Map(x => x.CodigoGenero).Length(2).Not.Nullable();
            Map(x => x.CodigoTipoServico).Length(4);
            Map(x => x.CodigoCor).Length(6);
            Map(x => x.CodigoTamanho).Length(6);
            HasMany<ProdutoAliquota>(x => x.ListaProdutoAliquotas).Not.LazyLoad().Cascade.AllDeleteOrphan();
            HasMany<ProdutoPreco>(x => x.ListaProdutoPrecos).Not.LazyLoad().Cascade.AllDeleteOrphan();
            HasMany<ProdutoEstoque>(x => x.ListaProdutoEstoques).Not.LazyLoad().Cascade.AllDeleteOrphan();
            HasManyToMany<Fornecedor>(x => x.ListaFornecedores)
                .Table("fornecedoresprodutos")
                .ParentKeyColumn("ProdutoId")
                .ChildKeyColumn("FornecedorId")
                .Not.LazyLoad();
        }
    }
}